ホームに戻る
出典 :
MVVM Toolkit の概要 - Community Toolkits for .NET | Microsoft Learn ObservableProperty 属性 - Community Toolkits for .NET | Microsoft Learn .NET用 MVVM Toolkit v8でMVVMコードを短く #C# - Qiita .NET standard2.x時代のMVVMライブラリ #C# - Qiita CommunityToolkit.Mvvm V8 入門 #C# - Qiita [C#]WPFでのMVVMについてサンプルアプリからまとめ C# CommunityToolkit.Mvvm の学習2 ObservableProperty - sh1’s diary
関連 :
MVVMパターン INotifyPropertyChanged コマンド(ICommand) ReactiveProperty [C#]属性(Attribute) [C#]partial
目次 :

MVVM Toolkitとは

MVVMパターンの構築を支援するライブラリ(フレームワーク)のひとつ。 INotifyPropertyChangedICommandを簡単に実装できる。

MVVM Toolkitが提供する機能

提供されるクラス 名前空間 担当機能
ObservableObject CommunityToolkit.Mvvm.ComponentModel INotifyPropertyChangedを実装したオブジェクトの基底クラス
RelayCommand CommunityToolkit.Mvvm.Input ICommandの実装
WeakReferenceMessenger CommunityToolkit.Mvvm.Messeging Messenger (詳細割愛)
IoC CommunityToolkit.Mvvm.DependencyInjection DI 、IoC (詳細割愛)

準備

画像 CommunityToolkit.Mvvm がインストールされていない場合は、Nuget より取得する。

実装例(MVVM Toolkit Ver.8以降)

ViewModel : ViewModel.cs
画像
View : View.xaml
画像
解説
ViewModel は ObservableObject を継承する。 変更通知プロパティとなるバッキングフィールドには [ObservableProperty] 属性、コマンドには [RelayCommand] 属性を付与する。 実際にバインドソースとなるプロパティおよびハンドラは、ビルド時に自動生成される。それらの命名規則は下表を参照。 コード中においても、元の定義名でのアクセスはエラーとなるため、生成されたシンボル名でアクセスする。
変更通知プロパティ ViewModel における定義 生成されるプロパティ バインド時に指定するパス
name
(先頭が小文字)
NameProperty Name
_name
(先頭がアンダースコア + 小文字)
NameProperty Name
コマンド ViewModel における定義 生成されるハンドラ バインド時に指定するパス
DoSomething()
(一般的なメソッド名)
DoSomethingCommand() DoSomethingCommand
OnDoSomething()
(先頭が "On" )
DoSomethingCommand() DoSomethingCommand
なお、変更通知プロパティの変更直前、直後に処理を行いたい場合は、部分メソッド On####Changing()On####Changed() を定義する。 ( #### は Property を除くプロパティ名)
// バッキングフィールド [ObservableProperty] private string name; // Name プロパティ( NameProperty )の変更直前処理 partial void OnNameChanging(string modified) =>Console.WriteLine($" Name プロパティが {modified} に変更されようとしています。"); // Name プロパティ( NameProperty )の変更直後処理 partial void OnNameChanged(string modified) =>Console.WriteLine($" Name プロパティが {modified} に変更されました。");